package easy.k次取反后最大化的数组和;

import java.util.Arrays;

/**
 * @author zhengTao
 * @version 1.0
 * @description: K 次取反后最大化的数组和
 * @date 2022/11/20 16:47
 */
public class Demo105 {
    public int largestSumAfterKNegations(int[] nums, int k) {
        //按照绝对值按大到小排列
        int[] ints = Arrays.stream(nums).boxed().sorted((s0, s1) -> Math.abs(s1) - Math.abs(s0)).mapToInt(Integer::intValue).toArray();
        //依次将值小于0的数字换成整数
        for (int i = 0; i < nums.length; i++) {
            if(ints[i]<0&&k>0){
                ints[i]=-ints[i];
                k--;
            }
        }
        //如果k还大于零,反复交换最后一个位置的值 (k为偶数，等于没有交换，为奇数，交换一次就行)
       if(k%2==1){
           ints[nums.length-1]=-ints[nums.length-1];
       }
       //求变换正负值之后的数组和
       return Arrays.stream(ints).sum();
    }
}
